当与并行编程专家交谈时，向量是一个有争议话题。根据作者的经验，这是因为不同的人以不同的方式定义和思考这个术语。\par

有两种对向量数据类型(数据的集合)的理解:\par

\begin{enumerate}
	\item \textbf{作为一种方便类型}：例如，将像素的颜色通道(例如RGB、YUV)分组为单个变量(例如：float3)，可以是一个向量。可以定义一个像素类或结构，并在其上定义像+这样的数学运算符，但向量类型可以方便地使用。其类型可以在许多着色器语言中找到，所以这种思维方式在许多GPU开发者中已经是共识了。
	\item 作为一种描述代码机制，是如何映射到硬件适配的\textbf{SIMD指令集}上的呢？例如，一些语言和实现中，float8上在理论上可以映射到硬件中的8通道SIMD指令。Vector类型在多种语言中作为特定指令集的一种高级替代存在。
\end{enumerate}

尽管这两种解释非常不同，但当SYCL和其他语言同时适用于CPU和GPU时，可以将其组合在一起。SYCL 1.2.1规范中的向量与这两种理解兼容(稍后将再次讨论这一点)。在进一步讨论之前，需要了解DPC++中的理解。\par

本书中，讨论了如何将工作项组合在一起以便使用强大的通信和同步原语，例如：子工作组栅栏和混洗。为了使这些操作在向量硬件上效率最优，假设子工作组中的不同工作项可以合并，并映射到SIMD指令。换句话说，编译器可以将多个工作项组合在一起，可以映射到硬件的SIMD指令上。第4章中，SPMD编程模型操作需要在支持向量操作的硬件上进行，一个通道的工作项构成的SIMD指令，而不是一个工作项定义了整个操作的SIMD指令。当硬件中映射到SIMD指令，并使用DPC++编译器以SPMD风格编程时，可以认为编译器总是在跨工作项进行向量化。\par

对于本书中描述的特性和硬件，向量主要用于本节的第一个解释——向量是一种类型，不应该认为是对SIMD指令的映射。工作项分组在一起，在指令的(CPU、GPU)硬件上形成SIMD指令。向量应该认为是提供方便的操作符，如swizles和math函数，使代码中对数据组的通用操作更加方便(例如，添加两个RGB像素)。\par

若开发者没有接触过GPU渲染语言中的向量，可以将SYCL向量作为一个本地工作项，如果有两个具有4个元素向量做加法，可能需要四个指令的硬件(这是从标量的角度)。向量的每个元素可以通过不同的指令/时钟周期相加。解释一下应该很容易懂，可以在源代码的单个操作中直接操作两个向量，而非对四个标量进行操作。\par

对于有CPU背景的开发人员，应该知道对SIMD硬件的隐式向量在编译器中以几种独立于向量类型的方式默认发生。编译器在工作项之间执行这种隐式向量化，从循环中提取向量操作，或者在映射到指令操作的向量类型—更多信息请参见第16章。\par

\begin{tcolorbox}[colback=blue!5!white,colframe=blue!75!black, title=其他可能的实现]
SYCL和DPC++的不同编译器和实现在理论上，可以对代码中的向量数据类型如何映射到向量硬件指令做出不同的决定。应该阅读供应商的文档和优化指南，以理解如何编写将映射到有效SIMD指令的代码。本书主要是针对DPC++编译器编写，因此介绍了DPC++的编程思维和模式。
\end{tcolorbox}

\begin{tcolorbox}[colback=blue!5!white,colframe=blue!75!black, title=变化即将发生]
要将向量类型视为方便类型，并在考虑到设备上的硬件映射，并期待跨工作项的向量化。这将成为DPC++编译器和工具链的默认行为。然而，还有另外两个变化需要注意。\\

首先，可以期待一些DPC++特性，这些特性将允许编写直接映射到硬件中SIMD指令的代码，特别是对于那些希望为特定体系结构进行代码调优，并从编译器向量器获得控制权的专家来说。虽然只会有少数开发人员使用的小众特性，但是可以期待这种编程机制。这些编程机制将确定代码风格(显式向量化风格)，这样就不会在编写现有代码时，与显式(且不那么可移植)风格之间产生混淆。\\

其次，本书这一节(讨论向量的解释)的需要强调了向量的含义存在混淆，这将在SYCL中解决。SYCL 2020临时规范中描述了一种数学数组类型(marray)，这是本节的第一个解释——与向量硬件指令无关的类型。应该期望另一种类型最终会覆盖第二种解释，很可能与C++的std::simd模板一致。有了这两种类型与向量数据类型的解释相关联，作为开发者将在编写的代码中清楚地传递信息。这将减少错误和混乱，当“什么是向量?”问题出现时，甚至可能减少专家级开发人员之间的激烈讨论，
\end{tcolorbox}

































